package cl.lexer.validator;

import java.util.ArrayList;
import java.util.List;

import cl.lexer.Token;
import cl.lexer.TokenType;

public class KeyworValidator implements TokenValidator {
    
    private static List<String> keywords;
    
    static {
        keywords = new ArrayList<String>();
        
        keywords.add("for");
        keywords.add("while");
        keywords.add("do");
        
        keywords.add("const");
        
        keywords.add("return");
        
        keywords.add("enum");
        
        keywords.add("extern");
        
        keywords.add("switch");
        keywords.add("case");
        keywords.add("default");
        
        keywords.add("break");
        keywords.add("continue");
        
        keywords.add("signed");
        keywords.add("unsigned");
        
        keywords.add("auto");
        keywords.add("union");
        keywords.add("volatile");
        keywords.add("register");
        
        keywords.add("sizeof");
        
        keywords.add("goto");
        
        keywords.add("static");
        
        keywords.add("struct");
        keywords.add("typedef");
    }
    
    @Override
    public TokenType getType() {
        return TokenType.KEYWORD;
    }

    @Override
    public boolean isValid(String value) {
        for(String s : keywords) {
            if(s.equals(value)) {
                return true;
            }
        }
        
        return false;
    }

    @Override
    public boolean possiblyValid(String value) {
        for(String s : keywords) {
            if(s.indexOf(value) == 0) {
                return true;
            }
        }
        
        return false;
    }

    @Override
    public Token generateToken(String value) {
        return new Token(TokenType.KEYWORD, value);
    }

}
